package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISalaryPlanFormulaDAO;
import org.jsola.hr.dto.SalaryPlanFormulaAddDTO;
import org.jsola.hr.dto.SalaryPlanFormulaUpdateDTO;
import org.jsola.hr.entity.SalaryPlanFormulaDO;
import org.jsola.hr.query.SalaryPlanFormulaQuery;
import org.jsola.hr.vo.SalaryPlanFormulaListVO;
import org.jsola.hr.vo.SalaryPlanFormulaVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface ISalaryPlanFormulaService extends IService<ISalaryPlanFormulaDAO, SalaryPlanFormulaDO> {

    /**
     * 新增工资方案计算公式及条件
     * @param salaryPlanFormulaAddDTO 新增工资方案计算公式及条件DTO
     * @param tokenUser 当前用户
     * @return 工资方案计算公式及条件详情信息
     */
    SalaryPlanFormulaVO save(SalaryPlanFormulaAddDTO salaryPlanFormulaAddDTO, TokenUser tokenUser);

    /**
     * 新增工资方案计算公式及条件
     * @param salaryPlanFormulaAddDTOList 新增工资方案计算公式及条件DTOlist
     * @param tokenUser 当前用户
     */
    void addList(String salaryPlanId,List<SalaryPlanFormulaAddDTO> salaryPlanFormulaAddDTOList, TokenUser tokenUser);

    /**
     * 批量新增工资方案计算公式及条件
     * @param salaryPlanFormulaAddDTOList 新增工资方案计算公式及条件DTO
     * @param tokenUser 当前用户
     * @return 工资方案计算公式及条件详情信息
     */
    List<SalaryPlanFormulaVO> batchSave(List<SalaryPlanFormulaAddDTO> salaryPlanFormulaAddDTOList, TokenUser tokenUser);

    /**
     * 修改工资方案计算公式及条件
     * @param salaryPlanFormulaUpdateDTO 修改工资方案计算公式及条件DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(SalaryPlanFormulaUpdateDTO salaryPlanFormulaUpdateDTO, TokenUser tokenUser);

    /**
     * 修改工资方案计算公式及条件(适应业务的修改)
     * @param  salaryPlanId 工资方案id
     * @param salaryPlanFormulaAddDTOList 修改工资方案计算公式及条件DTO
     * @param tokenUser 当前用户
     */
    void updateForBusiness(String salaryPlanId,List<SalaryPlanFormulaAddDTO> salaryPlanFormulaAddDTOList, TokenUser tokenUser);

    /**
     * 批量删除工资方案计算公式及条件，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param salaryPlanFormulaIds 工资方案计算公式及条件id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...salaryPlanFormulaIds);

    /**
     * 根据工资方案计算公式及条件id查找
     * @param salaryPlanFormulaId 工资方案计算公式及条件id
     * @param siteId 所属站点id
     * @return 工资方案计算公式及条件详情信息
     */
    SalaryPlanFormulaVO selectById(String salaryPlanFormulaId, String siteId);

    /**
     * 查询工资方案计算公式及条件
     * @param salaryPlanFormulaQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资方案计算公式及条件列表信息
     */
    List<SalaryPlanFormulaListVO> select(SalaryPlanFormulaQuery salaryPlanFormulaQuery, String siteId);

    /**
    * 查询工资方案计算公式及条件记录数
    * @param salaryPlanFormulaQuery 查询条件
    * @param siteId 所属站点id
    * @return 工资方案计算公式及条件记录数
    */
    int selectCount(SalaryPlanFormulaQuery salaryPlanFormulaQuery, String siteId);

    /**
     * 分页查询工资方案计算公式及条件
     * @param salaryPlanFormulaQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资方案计算公式及条件列表信息
     */
    Page<SalaryPlanFormulaListVO> selectPage(SalaryPlanFormulaQuery salaryPlanFormulaQuery, String siteId);


    /**
     * 根据工资方案计算公式及条件id查找
     * @param salaryPlanFormulaId 工资方案计算公式及条件id
     * @param siteId 所属站点id
     * @return 工资方案计算公式及条件
     */
    SalaryPlanFormulaDO selectDOById(String salaryPlanFormulaId, String siteId);

    /**
     * 查询工资方案计算公式及条件
     * @param salaryPlanFormulaQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资方案计算公式及条件列表
     */
    List<SalaryPlanFormulaDO> selectDO(SalaryPlanFormulaQuery salaryPlanFormulaQuery, String siteId);
}


